package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeHomeModule;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 首页模块配置Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeHomeModuleMapper extends BaseMapper<YunkeHomeModule> {

    /**
     * 分页查询模块列表
     */
    IPage<YunkeHomeModule> selectModulePage(Page<YunkeHomeModule> page,
                                           @Param("moduleType") Integer moduleType,
                                           @Param("displayPosition") String displayPosition,
                                           @Param("moduleName") String moduleName,
                                           @Param("isEnabled") Boolean isEnabled);

    /**
     * 根据位置查询模块列表
     */
    List<YunkeHomeModule> selectModulesByPosition(@Param("displayPosition") String displayPosition,
                                                 @Param("targetUser") Integer targetUser,
                                                 @Param("isEnabled") Boolean isEnabled);

    /**
     * 根据类型查询模块列表
     */
    List<YunkeHomeModule> selectModulesByType(@Param("moduleType") Integer moduleType,
                                             @Param("isEnabled") Boolean isEnabled);

    /**
     * 查询首页展示模块
     */
    List<YunkeHomeModule> selectHomeModules(@Param("targetUser") Integer targetUser);

    /**
     * 更新模块点击统计
     */
    int updateClickCount(@Param("id") Long id);

    /**
     * 更新模块浏览统计
     */
    int updateViewCount(@Param("id") Long id);

    /**
     * 批量更新模块状态
     */
    int updateModuleStatus(@Param("ids") List<Long> ids, @Param("status") Integer status);

    /**
     * 批量更新模块启用状态
     */
    int updateModuleEnabled(@Param("ids") List<Long> ids, @Param("isEnabled") Boolean isEnabled);

    /**
     * 批量更新模块置顶状态
     */
    int updateModuleTop(@Param("ids") List<Long> ids, @Param("isTop") Boolean isTop);

    /**
     * 统计模块数量
     */
    long countModules(@Param("moduleType") Integer moduleType,
                      @Param("displayPosition") String displayPosition,
                      @Param("isEnabled") Boolean isEnabled);
} 